home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / tex / wp2latex.zip / WP2LATEX.PAS < prev    next >
Pascal/Delphi Source File  |  1990-03-06  |  52KB  |  1,977 lines

  1. Program WordPerfect_to_LaTeX;
  2.  
  3. {           Version 1.0
  4.             Date 27-1-1990
  5. }
  6.  
  7. {$R+}       { Range check error }
  8.  
  9. Uses Crt;   { Clearscreen }
  10.  
  11. Type  Bin = file of byte;
  12.  
  13. Var
  14.    wpd_fn,
  15.    strip_fn,
  16.    tabel_fn,
  17.    latex_fn  : String;
  18.  
  19.    wpd,
  20.    tabel : Bin;
  21.    strip,
  22.    latex : Text;
  23.  
  24.    num_of_lines_stripfile : Word;
  25.  
  26.    open_com,
  27.    close_com : Array [$0..$10] of String;
  28.  
  29.    Exitsave : pointer;
  30.  
  31.  
  32. Procedure Rd_word(Var f:Bin; Var w:Word);
  33. { Deze procedure leest een woord uit de opgegeven binaire file. }
  34.  
  35. Var
  36.    b : Byte;
  37.  
  38. Begin
  39.    Read(f,b);
  40.    w:=b;
  41.    Read(f,b);
  42.    w:=w+256*b
  43. End;
  44.  
  45.  
  46. Procedure Wr_word(Var f:Bin; w:Word);
  47. { Deze procedure schrijft een woord in de opgegeven binaire file. }
  48.  
  49. Var
  50.    b : Byte;
  51.  
  52. Begin
  53.    b:=w mod 256;
  54.    Write(f,b);
  55.    b:=w div 256;
  56.    Write(f,b);
  57. End;
  58.  
  59.  
  60. Procedure Jump_in_file(Var f:Bin; dis:Longint);
  61. { Deze procedure springt in een binaire file het aantal opgegeven bytes. }
  62.  
  63. Var
  64.    cur_pos : Longint;
  65.  
  66. Begin
  67.    cur_pos := Filepos(f);
  68.    Seek(f,cur_pos+dis);
  69. End;
  70.  
  71.  
  72.  
  73. Procedure Wpd_check;
  74. { Kontroleert of de opgegeven WP-document wel daadwerkelijk een   }
  75. { WP5.0-document is.                                              }
  76.  
  77. Var id1,id2,std1,std2,filetype,dmp1,dmp2,dmp3 : Word;
  78.     Startdoc, Pointer : Longint;
  79.     b:Byte;
  80.  
  81. Begin
  82.    Rd_word(wpd,id1); Rd_word(wpd,id2);
  83.    Rd_word(wpd,std1); Rd_word(wpd,std2);
  84.    Rd_word(wpd,filetype);
  85.    Rd_word(wpd,dmp1); Rd_word(wpd,dmp2); Rd_word(wpd,dmp3);
  86.  
  87.    Startdoc:=std2*65536+std1;
  88.  
  89.    If (id1=$57ff) and (id2=$4350) and
  90.       (filetype=$0A01)  {and (dmp1=$0) and (dmp2=$0) and (dmp3=$0)}
  91.  
  92.    Then Seek(wpd,startdoc)    { Het is een WP5.0-document}
  93.    Else RunError($0201)       { Het is geen WP5.0-document}
  94. End;
  95.  
  96.  
  97.  
  98.  
  99. Procedure Filenames;
  100. { Deze procedure handelt het opgeven van de filenamen af. }
  101.  
  102. Var
  103.    name,
  104.    invoer,
  105.    wpdef,
  106.    latdef,
  107.    filename,
  108.    ext           : String;
  109.    l,p           : Integer;
  110.  
  111. Begin
  112.    If ParamCount<1
  113.    Then wpdef:=''
  114.    Else wpdef:=Paramstr(1);
  115.  
  116.    Writeln;
  117.    Writeln;
  118.    Write('WordPerfect-filename [',wpdef,'] : ');
  119.    Readln(invoer);
  120.    If invoer=''
  121.    Then wpd_fn:=wpdef
  122.    Else wpd_fn:=invoer;
  123.  
  124.    If wpd_fn=''                 { No filename entered }
  125.    Then RunError($200);
  126.  
  127.    name:=wpd_fn;
  128.    l:=Length(name);
  129.    p:=Pos('.',name);
  130.    if p=0 then p:=l+1;
  131.    filename:=copy(name,1,p-1);
  132.  
  133.    strip_fn:=concat(filename,'.STR');
  134.    tabel_fn:=concat(filename,'.TBL');
  135.    latdef:=concat(filename,'.TEX');
  136.  
  137.    Write('LaTeX-filename [',latdef,'] : ');
  138.    Readln(invoer);
  139.    Writeln;
  140.    If invoer=''
  141.    Then latex_fn:=latdef
  142.    Else latex_fn:=invoer;
  143.  
  144.    Assign(wpd,wpd_fn);
  145.    Assign(strip,strip_fn);
  146.    Assign(tabel,tabel_fn);
  147.    Assign(latex,latex_fn);
  148.  
  149. End;
  150.  
  151.  
  152. {$F+}
  153. Procedure Einde_prog;
  154. { Deze procedure wordt aan het einde van het programma aangeroepen. }
  155. { Er wordt gekeken of er zich Run-Time error heeft voor gedaan.     }
  156.  
  157. Var
  158.    save_ErrorAddr : Pointer;
  159.  
  160. Begin
  161.    Writeln;
  162.  
  163.    ExitProc:=Exitsave;
  164.    save_ErrorAddr := ErrorAddr;
  165.    ErrorAddr := nil;
  166.  
  167.    If save_ErrorAddr <> nil
  168.    Then Case Exitcode of
  169.                $0002 : Writeln('File not found.');
  170.                $0003 : Writeln('Path not found.');
  171.                $0100 : Writeln('Program Error.');
  172.                $0200 : Writeln('No filename entered !');
  173.                $0201 : Writeln('Not a WordPerfect 5.0 document !');
  174.  
  175.              Else ErrorAddr := save_ErrorAddr;
  176.         End
  177.  
  178.    Else Begin
  179.            Writeln('Conversion completed.');
  180.            Writeln;
  181.         End;
  182.  
  183.    Writeln;
  184. End;
  185. {$F-}
  186.  
  187.  
  188. Procedure Init_commando;
  189. Begin
  190.    Open_com[$0]:='{\LARGE ';
  191.    Open_com[$1]:='{\Large ';
  192.    Open_com[$2]:='{\large ';
  193.    Open_com[$3]:='{\small ';
  194.    Open_com[$4]:='{\footnotesize ';
  195.    Open_com[$5]:='$^{\rm ';
  196.    Open_com[$6]:='$_{\rm ';
  197.    Open_com[$7]:='';
  198.    Open_com[$8]:='{\it ';
  199.    Open_com[$9]:='';
  200.    Open_com[$A]:='';
  201.    Open_com[$B]:='\underline{\Underline{';
  202.    Open_com[$C]:='{\bf ';
  203.    Open_com[$D]:='';
  204.    Open_com[$E]:='\Underline{';
  205.    Open_com[$F]:='{\sc ';
  206.  
  207.    Close_com[$0]:='}';
  208.    Close_com[$1]:='}';
  209.    Close_com[$2]:='}';
  210.    Close_com[$3]:='}';
  211.    Close_com[$4]:='}';
  212.    Close_com[$5]:='}$';
  213.    Close_com[$6]:='}$';
  214.    Close_com[$7]:='';
  215.    Close_com[$8]:='\/}';
  216.    Close_com[$9]:='';
  217.    Close_com[$A]:='';
  218.    Close_com[$B]:='}}';
  219.    Close_com[$C]:='}';
  220.    Close_com[$D]:='';
  221.    Close_com[$E]:='}';
  222.    Close_com[$F]:='}';
  223. End;
  224.  
  225.  
  226. {---SLAG1----}
  227.  
  228. Procedure Convert_first_strike;
  229. { Dit is de komplete procedure van de eerste slag met zijn eigen proc.'s. }
  230.  
  231. Var
  232.    by  : Byte;
  233.    wo,
  234.    regelnum  : Word;
  235.  
  236.    convperc,
  237.    i     : Integer;
  238.  
  239.    srtdocpos,
  240.    fsize,
  241.    fpos,
  242.    nextdocpos : longint;
  243.  
  244.    lat    : Array[$20..$7F] of String[25];
  245.    char_set  : Array[$80..$FE] of Integer;
  246.    char_code : Array[$80..$FE] of Integer;
  247.    ext_lat   : Array[$80..$FE] of String[25];
  248.  
  249.  
  250.    leegptr,
  251.    openptr               : Array [0..1] of Integer;
  252.    attr_rij              : Array [0..1,0..16] of Byte;
  253.    open_attr_rij         : Array [0..1] of Boolean;
  254.    depth                 : Integer;
  255.  
  256.    envir,
  257.    line_term      : Char;
  258.  
  259.    char_on_line,
  260.    nomore_valid_tabs,
  261.    indenting,
  262.    indent_end,
  263.    ind_text1,
  264.    ind_text2  : Boolean;
  265.  
  266.    ind_leftmargin,
  267.    ind_rightmargin : Word;
  268.  
  269.    num_of_tabs,
  270.    latex_tabpos : Integer;
  271.    tabpos       : Array [1..40] of Word;
  272.    right_tab,
  273.    align_tab,
  274.    center_tab   : Boolean;
  275.  
  276.    WP_sidemargin  : Integer;
  277.  
  278.  
  279.  
  280.  
  281. Procedure WP_Default;
  282. Var
  283.    j : Integer;
  284.  
  285. Begin
  286.    WP_sidemargin := 1200;
  287.  
  288.    tabpos[1]:=$02c5;                      { 1e WP-tab is kantlijn --> }
  289.    For j:=2 to 10
  290.    Do tabpos[j]:=tabpos[j-1]+$02c5;       { Volgende tabs 1,5  cm     }
  291.    For j:=11 to 40                        { ($02c5 wpu) verder        }
  292.    Do tabpos[j]:=$FFFF;
  293.  
  294.    num_of_tabs:=10;
  295. End;
  296.  
  297.  
  298. Procedure Table_Init;
  299. Begin
  300.    lat[$20]:=' ';                        {Space}
  301.    lat[$21]:='!';                        {!}
  302.    lat[$22]:='"';                        {"}
  303.    lat[$23]:='\#';                       {#}
  304.    lat[$24]:='\$';                       {dollar}
  305.    lat[$25]:='\%';                       {%}
  306.    lat[$26]:='\&';                       {&}
  307.    lat[$27]:='''';                        {'}
  308.    lat[$28]:='(';                        {(}
  309.    lat[$29]:=')';                        {)}
  310.    lat[$2A]:='*';                        {*}
  311.    lat[$2B]:='+';                        {+}
  312.    lat[$2C]:=',';                        {,}
  313.    lat[$2D]:='-';                        {-}
  314.    lat[$2E]:='.';                        {.}
  315.    lat[$2F]:='/';                        {/}
  316.    lat[$30]:='0';                        {0}
  317.    lat[$31]:='1';                        {1}
  318.    lat[$32]:='2';                        {2}
  319.    lat[$33]:='3';                        {3}
  320.    lat[$34]:='4';                        {4}
  321.    lat[$35]:='5';                        {5}
  322.    lat[$36]:='6';                        {6}
  323.    lat[$37]:='7';                        {7}
  324.    lat[$38]:='8';                        {8}
  325.    lat[$39]:='9';                        {9}
  326.    lat[$3A]:=':';                        {:}
  327.    lat[$3B]:=';';                        {;}
  328.    lat[$3C]:='$<$';                      {<}
  329.    lat[$3D]:='=';                        {=}
  330.    lat[$3E]:='$>$';                      {>}
  331.    lat[$3F]:='?';                        {?}
  332.    lat[$40]:='@';                        {@}
  333.    lat[$41]:='A';                        {A}
  334.    lat[$42]:='B';                        {B}
  335.    lat[$43]:='C';                        {C}
  336.    lat[$44]:='D';                        {D}
  337.    lat[$45]:='E';                        {E}
  338.    lat[$46]:='F';                        {F}
  339.    lat[$47]:='G';                        {G}
  340.    lat[$48]:='H';                        {H}
  341.    lat[$49]:='I';                        {I}
  342.    lat[$4A]:='J';                        {J}
  343.    lat[$4B]:='K';                        {K}
  344.    lat[$4C]:='L';                        {L}
  345.    lat[$4D]:='M';